import * as echarts from '../../components/ec-canvas/echarts.min';
// 系统数据监控图
function initSysDataChart(canvas, width, height, dpr) {
  const chart = echarts.init(canvas, null, {
    width: width,
    height: height,
    devicePixelRatio: dpr
  });
  canvas.setChart(chart);
 
  var option = {
    // 全局设置
    title: {
      text: '订单数量走势图',
      left: '10',
      textStyle: {
        fontSize: 16,
        fontWeight: 'bold'
      }
    },
    backgroundColor: 'rgba(255,255,255,0.5)',
    // 提升
    tooltip: {
      trigger: 'axis'
    },
    // 图例
    legend: {
      data: ['订单量','订单量1'],
      right: '3%'
    },
    // 图表位置
    grid: {
      left: '3%',
      right: '4%',
      bottom: '3%',
      containLabel: true
    },
    xAxis: {
      type: 'category',
      boundaryGap: false,
      data: [],
       // 横坐标轴触发器配置
      axisPointer: {
        type: 'shadow',
        label: {
          show: true
        }
      } 
    },
    yAxis: {
      type: 'value'
    },
    // 数据系列
    series: [
      {
        name: '交易申请量',
        type: 'line',
        data: [],
        itemStyle: {
          color: 'blue'
        }
      },
      {
        name: '匹配订单量',
        type: 'line',
        data: [],
        itemStyle: {
          color: 'green'
        }
      }
    ],
    // 显示范围
    dataZoom: [
      {
        type: 'slider',
        start: 0,  // 初始的数据窗口范围的起始位置
        end: 9,    // 初始的数据窗口范围的结束位置
        xAxisIndex: 0  // 指定操作的 x 轴索引
      },
    ]
  };
  // 定义更新图表数据的函数
  function updateChartData() {
    getSysOrderCount()
      .then((res) => {
        if(res[0]==0 && res[1] ==0){
          return ;
        }
        option.xAxis.data.push(res[0]);
        option.series[0].data.push(res[0]);
        option.series[1].data.push(res[1]);
        if(res == 0){
          clearInterval(timer)
        }
        console.log(res);
        chart.setOption(option); // 更新图表数据
      })
      .catch((err) => {
        console.error(err); // 输出错误信息
        clearInterval(timer)
        // 在这里可以处理错误情况
      });
  }

  // 定时调用更新图表数据的函数
  var timer = setInterval(updateChartData, 10000); // 每隔5秒更新一次数据

  chart.setOption(option);
  return chart;
}
// 满意度饼图
function initSatisfyChart(canvas, width, height, dpr) {
  const chart = echarts.init(canvas, null, {
    width: width,
    height: height,
    devicePixelRatio: dpr // 可选，根据设备的像素比来渲染高清图表
  });

  canvas.setChart(chart);

  const option = {
    title: {
      text: '满意度调查',
      subtext: '样本：200',
      left: 'center',
      top: 10,
      textStyle: {
        fontSize: 16,
        color: '#333',
        fontWeight: 'bold'
      },
      subtextStyle: {
        color: '#999'
      }
    },
    backgroundColor: 'rgba(255,255,255,0.5)',
    tooltip: {
      trigger: 'item',
      formatter: '{b}: {c} ({d}%)'
    },
    series: [
      {
        type: 'pie',
        radius: ['50%', '70%'],
        center:['50%', '65%'],
        avoidLabelOverlap: false,
        label: {
          show: false,
          position: 'center'
        },
        emphasis: {
          label: {
            show: true,
            fontSize: '30',
            fontWeight: 'bold'
          }
        },
        labelLine: {
          show: false
        },
        data: [
          { value: 80, name: '满意' },
          { value: 20, name: '不满意' }
        ]
      }
    ]
  };

  chart.setOption(option);

  return chart;
}
// 获取系统订单量
function getSysOrderCount() {
  return new Promise((resolve, reject) => {
    wx.request({
      url: 'http://192.168.211.130:3001/querySysNum',
      method: 'GET',
      header: {
        'content-type': 'application/json',
      },
      success: function(res) {
        // console.log('获取系统数据成功。。。。',res.data[0])
        resolve(res.data); // 将获取的数据作为 Promise 的结果进行返回
      },
      fail: function(err) {
        reject(err); // 将错误信息作为 Promise 的拒绝原因进行返回
      }
    });
  });
}


Page({
  data: {
    showMask: true,//未登录，遮盖层
    showLoginBox: false,
    showErrorMessage: false,//是否显示登录错误信息
    errorMessage: "账号或密码错误",
    userInfo: null,
    userId:"user1",
    pwd: "",
    meterBalance:"100",//剩余电量
    accountBalance:"66",//账户余额
    lastTradeTime:"2023.1",//上次交易时间
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    'sys_ec': {
      onInit: initSysDataChart
    },
    'sat_ec': {
      onInit: initSatisfyChart
    }
  },
  onLoad(){
    let userId = wx.getStorageSync('user')
    console.log('进入页码，加载用户信息缓存',userId)
    if(userId) {
      this.setData({
        showMask: false,
        showLoginBox: false,
        userId: userId
      })
    }    
    // this.getUserInDB()    
    this.getUserInfo()

  },
  onShow(){
    let islogin = wx.getStorageSync('isLogin');
    if(islogin){
      this.getUserInfo()
    }
  },
  login(){
    this.setData({
      showLoginBox: true
    })

  }, 
  // 从云数据库获取数据
  getUserInDB(userId){
    wx.cloud.database().collection('user').where({
      'userId': userId
    }).get({
      success(res) {
        console.log(res)
      },
      fail(error) {
        console.log(error)
      }
    });
    
  },
  // 从fabric获取用户信息
  getUserInfo(){
    var userId = this.data.userId
    var that = this
    // 请求fabric上的信息
    console.log('从fabric获取用户信息:',userId)
    wx.request({
      url: 'http://192.168.211.130:3001/getUserInfo?UserId='+userId,
      method: 'GET',
      success: function (res) {
        // 请求成功时的处理逻辑
        const user = JSON.parse(res.data);
        that.setData({
          userId: user.id,
          meterBalance:user.total ,
          accountBalance: parseFloat(user.token).toFixed(3),
        })
        console.log('获取fabric上用户信息：',user)
      },
      fail: function (error) {
        // 请求失败时的处理逻辑
         //在fabric上注册
         that.registInFabric().then(result =>{
          console.log(result);
          that.getUserInfo()
        }).catch(error =>{
          console.log('fabric注册失败');
        })
      }
    });
  },
  // 请求fabric上的信息
  registInFabric(){
    var userId = this.data.userId
    var that = this
    return new Promise((resolve, reject) => {
      wx.request({
        url: 'http://192.168.211.130:3001/regist?UserId='+userId,
        method: 'GET',
        success: function (res) {
          // 请求成功时的处理逻辑
          console.log('fabric注册成功')
          resolve(res);
        },
        fail: function (error) {
          // 请求失败时的处理逻辑
          reject(error);
        }
      });
    });
  },
  closeLoginModal(){
    console.log('close')
    this.setData({
      showLoginModel: false,
    })
  },
  // 登录弹窗中点击确认登录按钮的逻辑
  confirmLogin: function() {
    const user = this.data.userId
    const pwd = this.data.pwd
    let that = this
    console.log('登录用户： ',user)
    // db
    wx.cloud.database().collection('user').where({
      'userId': user
    }).get({
      success(res) {
        if(res.data.length == 0){
          console.log('注册用户：',user)
          //加入数据库
          wx.cloud.database().collection('user').add({
            // data 字段表示需新增的 JSON 数据
            data: {
              userId: user,
              pwd: pwd,
              done: false
            },
            success: function(res) {
              console.log('注册成功')
            },
            fail: function(error) {
              console.error('插入用户失败', error);
            }
          })
          //在fabric上注册
          that.registInFabric().then(result =>{
            console.log(result);
            that.getUserInfo()
          }).catch(error =>{
            console.log('fabric注册失败');
          })
        }else{
          if(res.data[0].pwd != pwd){
            console.log('密码错误')
            return ;
          }else{
            console.log('登录成功')
          }
        }
        that.setData({
          userId: user,
          showLoginBox: false,
          showMask: false
        })
        wx.setStorageSync('user', user)
        wx.setStorageSync('isLogin', true)
      },
      fail(error) {
        console.log(error)
      }
    });
    
  },
  // 用户名输入框输入事件处理函数
  handleUsernameInput: function(event) {
    this.setData({
      userId: event.detail.value
    });
  },
  // 密码输入框输入事件处理函数
  handlePasswordInput: function(event) {
    this.setData({
      pwd: event.detail.value
    });
  },
});
